﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Model;

namespace DataAccess
{
    public class ErroresDataAccess
    {
        public IList<ErroresColaborador> ObtenerErroresPorColaborador(int idColaborador, DateTime fechaError)
        {
            var erroresPorColaborador = new List<ErroresColaborador>();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerErroresPorColaborador",
                    new[] { new SqlParameter("IdColaborador", idColaborador), 
                            new SqlParameter("FechaIngreso", fechaError)}))
            {
                while (dataReader.Read())
                {
                    erroresPorColaborador.Add(CrearEntidadErrorPorColaborador(dataReader));
                }
                dataReader.Close();
            }
            return erroresPorColaborador;
        }

        public IList<Mes> ObtenerMeses()
        {
            var meses = new List<Mes>();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerMeses"))
            {
                while (dataReader.Read())
                {
                    meses.Add(new Mes() { IdMes = SqlHelper.GetInt(dataReader, 0), NombreMes = SqlHelper.GetString(dataReader, 1) });
                }
                dataReader.Close();
            }
            return meses;
        }

        public void InsertarActualizarErroresPorColaborador(ErroresColaborador erroresColaborador)
        {
            SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "InsertarActualizarErrores",
                new[]
                {
                    new SqlParameter("IdError", erroresColaborador.IdError),
                    new SqlParameter("IdColaborador", erroresColaborador.IdColaborador),
                    new SqlParameter("FechaIngreso", erroresColaborador.FechaIngreso),
                    new SqlParameter("Cantidad", erroresColaborador.Cantidad),
                    new SqlParameter("Observaciones", "-")
                });

        }

        public void InsertarActualizarError(Error error)
        {
            SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "InsertarActualizarError",
                new[]
                {
                    new SqlParameter("IdError", error.IdError),
                    new SqlParameter("NombreError", error.NombreError),
                    new SqlParameter("Estado", (error.Estado ? "A" : "I"))
                });
        }

        public List<Error> ObtenerErrores()
        {
            var errores = new List<Error>();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerErrores"))
            {
                while (dataReader.Read())
                {
                    errores.Add(CrearEntidadError(dataReader));
                }
                dataReader.Close();
            }
            return errores;
        }

        private ErroresColaborador CrearEntidadErrorPorColaborador(IDataReader dataReader)
        {
            return new ErroresColaborador()
            {
                IdError = SqlHelper.GetInt(dataReader, 0),
                NombreError = SqlHelper.GetString(dataReader, 1),
                IdColaborador = SqlHelper.GetInt(dataReader, 2),
                Cantidad = SqlHelper.GetInt(dataReader, 3),
                Observaciones = SqlHelper.GetString(dataReader, 4)
            };
        }

        private Error CrearEntidadError(IDataReader dataReader)
        {
            return new Error
            {
                IdError = SqlHelper.GetInt(dataReader, 0),
                NombreError = SqlHelper.GetString(dataReader, 1),
                Estado = (SqlHelper.GetString(dataReader, 2) == "A")
            };
        }

        public void ActivarInactivarError(int idError)
        {
            SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "ActivarInactivarError",
                new[] {
                    new SqlParameter("IdError", idError)
                });
        }

        public Error ObtenerErrorPorId(int idError)
        {
            var error = new Error();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerErrorPorId",
                        new[] { new SqlParameter("IdError", idError) }))
            {
                while (dataReader.Read())
                {
                    error = (CrearEntidadError(dataReader));
                }
                dataReader.Close();
            }
            return error;
        }
    }
}

